<?php
declare (strict_types = 1);

namespace app\homework\controller;

use think\Request;

/**
 * ## 第二节课：控制器
多应用命令：
composer require topthink/think-multi-app

1.创建一个 `hello` 控制器，并且访问到该控制器下的 `world` 方法。
 * php think make:controller homework\controller\Hello
2.创建 `请求对象`【不能少于两种方式】。
 * /homework/hello/world
 * /index.php/homework/hello/world
3`.判断当前请求` 是什么类型，并通过 `对应的方法获取传递过来的参数`【请求类型未知，参数个数未知，需要自己写方法判断】。
 *
4.分别使用 `html` 类型 和 `json` 类型输出结果。
5.当前方法为非 `index` 方法，当访问该方法的时候让其能访问到 `index` 方法【不能少于两种】。
 */
/**
 * Class Hello
 * @package app\homework\controller
 */
class Hello
{
    protected $request;
//1.创建一个 `hello` 控制器，并且访问到该控制器下的 `world` 方法。
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function world()
    {
        return "world";
        //
        $request = new Request();
        echo "<pre>";
        print_r($request->method());
        print_r($request->request());
        echo "</pre>";
        die;
    }

//2.创建 `请求对象`【不能少于两种方式】。
    public function __construct(Request $request)
    {
        $this->request = $request;
    }

    public function index()
    {
        dump($this->request);
    }

    public function operate(Request $request)
    {
        dump($request);
    }

    public function staticTest()
    {
        dump(\think\facade\Request::method());
    }
//3`.判断当前请求` 是什么类型，并通过 `对应的方法获取传递过来的参数`【请求类型未知，参数个数未知，需要自己写方法判断】。
    public function type()
    {
        switch (\think\facade\Request::method()){
            case "GET":
                dump(\think\facade\Request::get());
                break;
            case "POST":
                dump(\think\facade\Request::post());
                break;
            case "PUT":
                dump(\think\facade\Request::put());
                break;
            default:
                dump(\think\facade\Request::request());
                break;
        }
    }
//4.分别使用 `html` 类型 和 `json` 类型输出结果。
    public function output()
    {
        // html
//        return "html";
//        return response("html");
        // json
        return json(["json"]);
    }

//5.当前方法为非 `index` 方法，当访问该方法的时候让其能访问到 `index` 方法【不能少于两种】。
    public function red()
    {
//        return redirect("hello/index");
//        return redirect("homework/hello/index");
//        return redirect("app/homework/hello/index");

    }
}
